import pandas as pd

data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]]
index = ['张三', '李四', '王五']
columns = ['数学', '语文', '英语']

pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)

"""
1、按列增加数据
"""
# 采用直接赋值的方式
df['政治'] = [90, 89, 100]
print(df)

# 使用loc属性
df.loc[:, '化学'] = [30, 89, 75]
print(df)

# 在指定索引位置加入一列
lst = [79, 85, 69]
df.insert(1, '历史', lst)
print(df)

"""
2、按行增加数据
"""
df.loc['陈六'] = [87, 56, 79, 0, 0, 0]  # 添加一行
print(df)

# 添加多行
new_df = pd.DataFrame(
    data={
        '数学': [78, 90],
        '历史': [56, 67],
        '语文': [78, 65],
        '英语': [90, 87],
        '政治': [78, 68],
        '化学': [90, 78]
    },
    index=['张丽丽', '王一一']
)
df = df._append(new_df)
print(df)

"""
3、修改数据
"""
# 修改列标题 -- 直接使用columns属性
df.columns = ['数学（上）', '历史', '语文', '英语（下）', '政治', '化学']
print(df)

# 修改列标题 -- 使用rename函数，  inplace:是否直接修改DataFrame
df.rename(columns={'数学（上）': '数学（下）'}, inplace=True)
print(df)

# 修改行标题 -- 直接赋值
df.index = list('123456')
print(df)

# 修改行标题 -- rename方法
df.rename({'1': '一', '2': '二'}, inplace=True, axis=0)
print(df)

# 修改行数据
df.loc['3'] = [100, 100, 100, 100, 100, 100]
print(df)

df.iloc[0, :] = [100, 100, 100, 100, 100, 100]  # 修改0行 所有数据
print(df)

# 修改列数据
df.loc[:, '数学（下）'] = [120, 120, 120, 120, 120, 120]
print(df)
df.iloc[:, 0] = [90, 90, 90, 90, 90, 90]
print(df)

# 修改某一处数据
df.loc['4', '语文'] = 150
print(df)

df.iloc[3, 2] = 250  # 按索引
print(df)

"""
4、数据的删除
"""
# 删除列
df.drop(['数学（下）'], axis=1, inplace=True)
print(df)

df.drop(columns='历史', inplace=True)
print(df)

df.drop(labels='化学', axis=1, inplace=True)
print(df)

# 删除行
df.drop(['6'], axis=0, inplace=True)
print(df)

df.drop(index='5', inplace=True)
print(df)

df.drop(labels='4', axis=0, inplace=True)
print(df)

# 带条件的删除，删除数学成绩大于90 的第二个数据
print(df[df['政治'] > 90])
print(df[df['政治'] > 90].index)

df.drop(df[df['政治'] > 90].index[1], inplace=True)
print(df)

